WhitespaceLight:
	push {lr}
	mov r0, #16
	mov r1, #0
	bl SetGPIO
	ldr r0, =250000
	bl WaitTimer
	pop {pc}
FlashDot:
	push {lr}
	mov r0, #16
	mov r1, #1
	bl SetGPIO
	ldr r0, =250000
	bl WaitTimer
	pop {pc}
FlashDash:
	push {lr}
	mov r0, #16
	mov r1, #1
	bl SetGPIO
	ldr r0, =750000
	bl WaitTimer
	pop {pc}
.globl SendLetter
SendLetter:
	push {r5, r6, r7, r8, lr}
	letter .req r5
	mov letter, r0
	size .req r6
	mov size, r1
	rest .req r7
	mov rest, #32
	sub rest, rest, size
	lsl letter, rest
	flash .req r8
send_letter_loop:
	mov flash, #1
	lsl flash, #31
	and flash, letter
	cmp flash, #0
	beq flash_dot
	bl FlashDash
	b continue
flash_dot:
	bl FlashDot
continue:
	sub size, #1
	cmp size, #0
	beq end_send_letter
	bl WhitespaceLight
	lsl letter, #1
	b send_letter_loop
end_send_letter:
	.unreq letter
	.unreq size
	.unreq rest
	.unreq flash
	pop {r5, r6, r7, r8, pc}
.globl WhitespaceLetter
WhitespaceLetter:
	push {lr}
	mov r0, #16
	mov r1, #0
	bl SetGPIO
	ldr r0, =750000
	bl WaitTimer
	pop {pc}
.globl WhitespaceWord
WhitespaceWord:
	push { lr }
	mov r0, #16
	mov r1, #0
	bl SetGPIO
	ldr r0, =1750000
	bl WaitTimer
	pop { pc }
.globl OKLedBlink
OKLedBlink:
	push {r5, lr}
	mov r5, r0
	mov r0, #16
	mov r1, #1
	bl SetGPIO
	mov r0, r5
	bl WaitTimer
	mov r0, #16
	mov r1, #0
	bl SetGPIO
	mov r0, r5
	bl WaitTimer
	pop {r5, pc}
